avoid divisions by zero, thus making the reference conversions correct.
authorØyvind Kolås <ok@src.gnome.org>
Wed, 14 Feb 2007 23:23:36 +0000 (23:23 +0000)
committerØyvind Kolås <ok@src.gnome.org>
Wed, 14 Feb 2007 23:23:36 +0000 (23:23 +0000)
* babl/base/model-rgb.c: (premultiplied_to_non_premultiplied),
(rgba_gamma_2_2_premultiplied2rgba): avoid divisions by zero,
thus making the reference conversions correct.

svn path=/trunk/; revision=216

ChangeLog
babl/base/model-rgb.c

index 494f41e35993ddbe154aa5553ee1d7d033f34357..ee5aa21d5ff0e227db59817029bbde4ac94e6ddb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-02-15  Øyvind Kolås  <pippin@gimp.org>
+
+       * babl/base/model-rgb.c: (premultiplied_to_non_premultiplied),
+       (rgba_gamma_2_2_premultiplied2rgba): avoid divisions by zero,
+       thus making the reference conversions correct.
+
 2007-02-11  Øyvind Kolås  <pippin@gimp.org>
 
        * NEWS: updated news for many versions.
index 1b6e7d58594173d32a612c2dc16cb66b651451fb..3a9651dacd78ee642346eea6c907c0a9e99b553c 100644 (file)
@@ -289,7 +289,7 @@ premultiplied_to_non_premultiplied (int    src_bands,
             }
           else
             {
-              *(double*)dst[band] = 0.001;
+              *(double*)dst[band] = 0.00;
             }
         }
       *(double*)dst[dst_bands-1] = alpha;
@@ -330,9 +330,18 @@ rgba_gamma_2_2_premultiplied2rgba (char *src,
   while (n--)
     {
       double alpha = ((double*) src)[3];
-      ((double*)dst)[0] = gamma_2_2_to_linear (((double*) src)[0] / alpha);
-      ((double*)dst)[1] = gamma_2_2_to_linear (((double*) src)[1] / alpha);
-      ((double*)dst)[2] = gamma_2_2_to_linear (((double*) src)[2] / alpha);
+    if (alpha > 0.0001)
+        {
+          ((double*)dst)[0] = gamma_2_2_to_linear (((double*) src)[0] / alpha);
+          ((double*)dst)[1] = gamma_2_2_to_linear (((double*) src)[1] / alpha);
+          ((double*)dst)[2] = gamma_2_2_to_linear (((double*) src)[2] / alpha);
+        }
+      else
+        {
+          ((double*)dst)[0] = 0.0;
+          ((double*)dst)[1] = 0.0;
+          ((double*)dst)[2] = 0.0;
+        }
       ((double*)dst)[3] = alpha;
 
       src+=4 * sizeof (double);